<!DOCTYPE html>
<html lang="zh-CN">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <meta name="generator" content="VuePress 2.0.0-beta.43">
    <style>
      :root {
        --c-bg: #fff;
      }
      html.dark {
        --c-bg: #22272e;
      }
      html, body {
        background-color: var(--c-bg);
      }
    </style>
    <script>
      const userMode = localStorage.getItem('vuepress-color-scheme');
			const systemDarkMode = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;
			if (userMode === 'dark' || (userMode !== 'light' && systemDarkMode)) {
				document.documentElement.classList.toggle('dark', true);
			}
    </script>
    <link rel="icon" href="/img/geass-bg.ico"><title>JDBC 流程 | 三更编程</title><meta name="description" content="瑾色流年，追梦少年">
    <link rel="modulepreload" href="/calos/assets/app.3c01b79d.js"><link rel="modulepreload" href="/calos/assets/JDBC 流程.html.7a6ab0ff.js"><link rel="modulepreload" href="/calos/assets/JDBC 流程.html.ce2aeb27.js"><link rel="prefetch" href="/calos/assets/index.html.434c130f.js"><link rel="prefetch" href="/calos/assets/index.html.38287094.js"><link rel="prefetch" href="/calos/assets/index.html.dc2731e1.js"><link rel="prefetch" href="/calos/assets/map、string、json互转.html.a3e18534.js"><link rel="prefetch" href="/calos/assets/nginx屏蔽指定IP.html.e4a2a6ae.js"><link rel="prefetch" href="/calos/assets/如何优雅的读取yml配置文件.html.237ae95b.js"><link rel="prefetch" href="/calos/assets/Windows中杀死占用某个端口的进程.html.ebb3fd07.js"><link rel="prefetch" href="/calos/assets/idea快捷键.html.11f25a2e.js"><link rel="prefetch" href="/calos/assets/window下nginx的启动和关闭.html.3f8089eb.js"><link rel="prefetch" href="/calos/assets/HTTP 请求的 GET 与 POST 方式的区别.html.70c99406.js"><link rel="prefetch" href="/calos/assets/equals 与 __ 的区别.html.21e2462a.js"><link rel="prefetch" href="/calos/assets/final_ finally_ finalize 的区别.html.54f59d1c.js"><link rel="prefetch" href="/calos/assets/int 和 Integer 有什么区别.html.67e35523.js"><link rel="prefetch" href="/calos/assets/session 与 cookie 区别.html.7d7e0bf2.js"><link rel="prefetch" href="/calos/assets/session 分布式处理.html.c87e6402.js"><link rel="prefetch" href="/calos/assets/抽象类和接口有什么区别.html.f57fcd8c.js"><link rel="prefetch" href="/calos/assets/说说反射的用途及实现.html.4d3450f4.js"><link rel="prefetch" href="/calos/assets/说说自定义注解的场景及实现.html.da693051.js"><link rel="prefetch" href="/calos/assets/重载和重写的区别.html.fd8cba24.js"><link rel="prefetch" href="/calos/assets/面向对象的特征.html.04117750.js"><link rel="prefetch" href="/calos/assets/ArrayList 与 LinkedList 区别.html.41c2bed9.js"><link rel="prefetch" href="/calos/assets/ArrayList 与 Vector 区别.html.53c98ee1.js"><link rel="prefetch" href="/calos/assets/ConcurrentHashMap 的工作原理及代码实现.html.a2e726b9.js"><link rel="prefetch" href="/calos/assets/HashMap 和 ConcurrentHashMap 的区别.html.fe1608c2.js"><link rel="prefetch" href="/calos/assets/HashMap 和 HashTable 的区别.html.84ede94a.js"><link rel="prefetch" href="/calos/assets/HashMap 的工作原理及代码实现.html.40806ebf.js"><link rel="prefetch" href="/calos/assets/HashSet 和 HashMap 区别.html.c263e389.js"><link rel="prefetch" href="/calos/assets/List 和 Map 区别.html.c7663a93.js"><link rel="prefetch" href="/calos/assets/List 和 Set 区别.html.30ee9f95.js"><link rel="prefetch" href="/calos/assets/ThreadLocal 原理分析.html.e6ec3177.js"><link rel="prefetch" href="/calos/assets/sleep()、join（）、yield（）有什么区别.html.52955908.js"><link rel="prefetch" href="/calos/assets/创建线程的方式及实现.html.69d74ff7.js"><link rel="prefetch" href="/calos/assets/线程池的几种方式与使用场景.html.3e069e51.js"><link rel="prefetch" href="/calos/assets/线程的生命周期.html.ceacc3ba.js"><link rel="prefetch" href="/calos/assets/讲讲线程池的实现原理.html.243a621b.js"><link rel="prefetch" href="/calos/assets/说说 CountDownLatch 与 CyclicBarrier 区别.html.d43b99d7.js"><link rel="prefetch" href="/calos/assets/说说 CountDownLatch 原理.html.5b6aecf0.js"><link rel="prefetch" href="/calos/assets/说说 CyclicBarrier 原理.html.9106a0b6.js"><link rel="prefetch" href="/calos/assets/说说 Exchanger 原理.html.c22cb52b.js"><link rel="prefetch" href="/calos/assets/说说 Semaphore 原理.html.6f2d0759.js"><link rel="prefetch" href="/calos/assets/01.说说线程安全问题.html.b79a46d5.js"><link rel="prefetch" href="/calos/assets/02.synchronize 实现原理.html.b5d824fa.js"><link rel="prefetch" href="/calos/assets/03.synchronized 与 lock 的区别.html.0abfb1a4.js"><link rel="prefetch" href="/calos/assets/04.CAS 乐观锁.html.927d8a19.js"><link rel="prefetch" href="/calos/assets/05.ABA 问题.html.5c33fb89.js"><link rel="prefetch" href="/calos/assets/06.乐观锁的业务场景及实现方式.html.960a8ec6.js"><link rel="prefetch" href="/calos/assets/07.volatile 实现原理.html.3eb1b653.js"><link rel="prefetch" href="/calos/assets/BeanFactory 和 ApplicationContext 有什么区别.html.458d5d31.js"><link rel="prefetch" href="/calos/assets/Spring AOP 实现原理.html.fe8eae25.js"><link rel="prefetch" href="/calos/assets/Spring Bean 的生命周期.html.71ac6c3c.js"><link rel="prefetch" href="/calos/assets/Spring IOC 如何实现.html.17540d33.js"><link rel="prefetch" href="/calos/assets/Spring MVC 启动流程.html.62a9aad6.js"><link rel="prefetch" href="/calos/assets/Spring MVC 运行流程.html.14446b3e.js"><link rel="prefetch" href="/calos/assets/Spring 事务实现方式.html.0e9d34e4.js"><link rel="prefetch" href="/calos/assets/Spring 事务底层原理.html.e8559776.js"><link rel="prefetch" href="/calos/assets/Spring 框架中用到了哪些设计模式.html.b8dd6d97.js"><link rel="prefetch" href="/calos/assets/Spring 的单例实现原理.html.2cfe14a3.js"><link rel="prefetch" href="/calos/assets/动态代理（CGLIB 与 JDK）.html.1f663f5c.js"><link rel="prefetch" href="/calos/assets/如何自定义注解实现功能.html.01198d71.js"><link rel="prefetch" href="/calos/assets/说说 Spring AOP.html.aabcdca2.js"><link rel="prefetch" href="/calos/assets/Session 分布式方案.html.442307d3.js"><link rel="prefetch" href="/calos/assets/分布式事务.html.7ee8dfcf.js"><link rel="prefetch" href="/calos/assets/分布式锁的场景与实现.html.356395fc.js"><link rel="prefetch" href="/calos/assets/谈谈业务中使用分布式的场景.html.0ac12bcc.js"><link rel="prefetch" href="/calos/assets/集群与负载均衡的算法与实现.html.96a65634.js"><link rel="prefetch" href="/calos/assets/你怎么理解 RESTful.html.831175e2.js"><link rel="prefetch" href="/calos/assets/你怎么理解 RPC 框架.html.2c3ac7a5.js"><link rel="prefetch" href="/calos/assets/前后端分离是如何做的.html.f3c52058.js"><link rel="prefetch" href="/calos/assets/如何保证接口的幂等性.html.02ceaee8.js"><link rel="prefetch" href="/calos/assets/如何应对微服务的链式调用异常.html.b4774d97.js"><link rel="prefetch" href="/calos/assets/如何拆分服务.html.95e4453a.js"><link rel="prefetch" href="/calos/assets/如何理解 RESTful API 的幂等性.html.2bfa2ca8.js"><link rel="prefetch" href="/calos/assets/如何解决跨域.html.e8467c26.js"><link rel="prefetch" href="/calos/assets/对于快速追踪与定位问题.html.fbac926c.js"><link rel="prefetch" href="/calos/assets/微服务与 SOA 的区别.html.e6da2c33.js"><link rel="prefetch" href="/calos/assets/微服务哪些框架.html.95d9786b.js"><link rel="prefetch" href="/calos/assets/微服务如何进行数据库管理.html.7dcd9619.js"><link rel="prefetch" href="/calos/assets/微服务的安全.html.ddde5008.js"><link rel="prefetch" href="/calos/assets/怎么考虑数据一致性问题.html.fef8ed43.js"><link rel="prefetch" href="/calos/assets/说说 CAP 定理、 BASE 理论.html.23182626.js"><link rel="prefetch" href="/calos/assets/说说 Dubbo 的实现原理.html.c6e86835.js"><link rel="prefetch" href="/calos/assets/说说 RPC 的实现原理.html.0644d365.js"><link rel="prefetch" href="/calos/assets/说说如何设计一个良好的 API.html.6a4c254f.js"><link rel="prefetch" href="/calos/assets/说说最终一致性的实现方案.html.0837cb59.js"><link rel="prefetch" href="/calos/assets/58 到家 MySQL 军规升级版.html.8f5d2345.js"><link rel="prefetch" href="/calos/assets/MySQL 索引使用的注意事项.html.932475bc.js"><link rel="prefetch" href="/calos/assets/MySQL 遇到的死锁问题.html.075a9a38.js"><link rel="prefetch" href="/calos/assets/ObjectId 规则.html.32307657.js"><link rel="prefetch" href="/calos/assets/limit 20000 加载很慢怎么解决.html.89ef1bb3.js"><link rel="prefetch" href="/calos/assets/为什么要用 B-Tree.html.4e5fc6a9.js"><link rel="prefetch" href="/calos/assets/倒排索引.html.b03a0e77.js"><link rel="prefetch" href="/calos/assets/分库与分表带来的分布式困境与应对之策.html.31226154.js"><link rel="prefetch" href="/calos/assets/存储引擎的 InnoDB 与 MyiSAM.html.019010eb.js"><link rel="prefetch" href="/calos/assets/数据库索引的原理.html.555ce19b.js"><link rel="prefetch" href="/calos/assets/聊聊 ElasticSearch 使用场景.html.399e1fba.js"><link rel="prefetch" href="/calos/assets/聊聊 MongoDB 使用场景.html.c3a965c6.js"><link rel="prefetch" href="/calos/assets/聚集索引与非聚集索引的区别.html.b7b0bebc.js"><link rel="prefetch" href="/calos/assets/说说 SQL 优化之道.html.79586562.js"><link rel="prefetch" href="/calos/assets/说说分库与分表设计.html.1e89876f.js"><link rel="prefetch" href="/calos/assets/说说反模式设计.html.9f612aaf.js"><link rel="prefetch" href="/calos/assets/选择合适的分布式主键方案.html.c728bce9.js"><link rel="prefetch" href="/calos/assets/选择合适的数据存储方案.html.1b0607f8.js"><link rel="prefetch" href="/calos/assets/Redis 为什么是单线程的.html.98ca4da2.js"><link rel="prefetch" href="/calos/assets/Redis 内存淘汰机制.html.8f4b5235.js"><link rel="prefetch" href="/calos/assets/Redis 内部结构.html.6ff0e343.js"><link rel="prefetch" href="/calos/assets/Redis 持久化机制.html.b1f9e3f0.js"><link rel="prefetch" href="/calos/assets/Redis 有哪些类型.html.8e8f797a.js"><link rel="prefetch" href="/calos/assets/Redis 集群方案与实现.html.b4d06ade.js"><link rel="prefetch" href="/calos/assets/使用缓存的合理性问题.html.29a17563.js"><link rel="prefetch" href="/calos/assets/缓存崩溃.html.9b54d4ac.js"><link rel="prefetch" href="/calos/assets/缓存降级.html.e0eae96e.js"><link rel="prefetch" href="/calos/assets/聊聊 Redis 使用场景.html.0c299be8.js"><link rel="prefetch" href="/calos/assets/如何保证消息的有序性.html.0122750a.js"><link rel="prefetch" href="/calos/assets/消息的堆积解决思路.html.5c566777.js"><link rel="prefetch" href="/calos/assets/消息的幂等性解决思路.html.807b9b31.js"><link rel="prefetch" href="/calos/assets/消息的重发补偿解决思路.html.cf6aaf86.js"><link rel="prefetch" href="/calos/assets/消息队列的使用场景.html.7d348476.js"><link rel="prefetch" href="/calos/assets/自己如何实现消息队列.html.ff25cd5e.js"><link rel="prefetch" href="/calos/assets/Netty 内部执行流程.html.f4b133df.js"><link rel="prefetch" href="/calos/assets/Netty 线程模型.html.19bc441e.js"><link rel="prefetch" href="/calos/assets/Netty 重连实现.html.a82253cf.js"><link rel="prefetch" href="/calos/assets/TCP 粘包拆包的解决办法.html.9a936e29.js"><link rel="prefetch" href="/calos/assets/为什么选择 Netty.html.6bf5518b.js"><link rel="prefetch" href="/calos/assets/什么是 TCP 粘包拆包.html.d5f6579a.js"><link rel="prefetch" href="/calos/assets/原生的 NIO 在 JDK 1.7 版本存在 EPoll BUG.html.70e7d8c3.js"><link rel="prefetch" href="/calos/assets/说说 Netty 的零拷贝.html.36475491.js"><link rel="prefetch" href="/calos/assets/说说业务中 Netty 的使用场景.html.238d007a.js"><link rel="prefetch" href="/calos/assets/HTTPS 原理剖析.html.1033efba.js"><link rel="prefetch" href="/calos/assets/HTTPS 降级攻击.html.97e74e2f.js"><link rel="prefetch" href="/calos/assets/基于角色的访问控制.html.564099b6.js"><link rel="prefetch" href="/calos/assets/安全要素与 STRIDE 威胁.html.46583659.js"><link rel="prefetch" href="/calos/assets/授权与认证.html.9b7e7a34.js"><link rel="prefetch" href="/calos/assets/防范常见的 Web 攻击.html.e6b4598c.js"><link rel="prefetch" href="/calos/assets/如何发现性能瓶颈.html.ea8bf6e8.js"><link rel="prefetch" href="/calos/assets/性能指标有哪些.html.07053faa.js"><link rel="prefetch" href="/calos/assets/性能调优的常见手段.html.ee519a99.js"><link rel="prefetch" href="/calos/assets/23 种设计模式的设计理念.html.a6199e09.js"><link rel="prefetch" href="/calos/assets/设计模式之间的异同，例如策略模式与状态模式的区别.html.6bdf2535.js"><link rel="prefetch" href="/calos/assets/设计模式之间的结合，例如策略模式 _ 简单工厂模式的实践.html.f89baf65.js"><link rel="prefetch" href="/calos/assets/设计模式的性能，例如单例模式哪种性能更好.html.765907bd.js"><link rel="prefetch" href="/calos/assets/说说你对设计原则的理解.html.76948e28.js"><link rel="prefetch" href="/calos/assets/说说常用开源框架中设计模式使用分析.html.f4d6ee2d.js"><link rel="prefetch" href="/calos/assets/你如何对需求原型进行理解和拆分.html.9f97a00d.js"><link rel="prefetch" href="/calos/assets/你如何理解用户痛点.html.3a890fac.js"><link rel="prefetch" href="/calos/assets/你针对产品提出哪些交互和改进意见.html.e5432c8a.js"><link rel="prefetch" href="/calos/assets/说说你对功能性需求的理解.html.2031276c.js"><link rel="prefetch" href="/calos/assets/说说你对非功能性需求的理解.html.c30f86f8.js"><link rel="prefetch" href="/calos/assets/你如何划分领域边界.html.2a6050d6.js"><link rel="prefetch" href="/calos/assets/你如何考虑服务化.html.73fd13e6.js"><link rel="prefetch" href="/calos/assets/你如何考虑组件化.html.d48dd753.js"><link rel="prefetch" href="/calos/assets/你如何进行领域建模.html.5f5c6ee1.js"><link rel="prefetch" href="/calos/assets/说说你在项目中使用过的 UML 图.html.17729c34.js"><link rel="prefetch" href="/calos/assets/说说概要设计.html.260c8231.js"><link rel="prefetch" href="/calos/assets/JDK8 新特性.html.fb6eac46.js"><link rel="prefetch" href="/calos/assets/JavaScript this 关键字.html.32bda2d2.js"><link rel="prefetch" href="/calos/assets/MySQL 优化.html.2cf73285.js"><link rel="prefetch" href="/calos/assets/Zookeeper 假死脑裂.html.0da0647f.js"><link rel="prefetch" href="/calos/assets/双亲委派模型.html.94f43361.js"><link rel="prefetch" href="/calos/assets/死信、延迟、重试队列.html.99d86450.js"><link rel="prefetch" href="/calos/assets/面试题补充.html.0f27d59d.js"><link rel="prefetch" href="/calos/assets/404.html.93146c89.js"><link rel="prefetch" href="/calos/assets/index.html.2235a27d.js"><link rel="prefetch" href="/calos/assets/index.html.a1ed73f1.js"><link rel="prefetch" href="/calos/assets/index.html.374b203a.js"><link rel="prefetch" href="/calos/assets/map、string、json互转.html.849b6482.js"><link rel="prefetch" href="/calos/assets/nginx屏蔽指定IP.html.640828d7.js"><link rel="prefetch" href="/calos/assets/如何优雅的读取yml配置文件.html.50eaeffd.js"><link rel="prefetch" href="/calos/assets/Windows中杀死占用某个端口的进程.html.f9f1a102.js"><link rel="prefetch" href="/calos/assets/idea快捷键.html.f3af3d67.js"><link rel="prefetch" href="/calos/assets/window下nginx的启动和关闭.html.efde469d.js"><link rel="prefetch" href="/calos/assets/HTTP 请求的 GET 与 POST 方式的区别.html.fdc21331.js"><link rel="prefetch" href="/calos/assets/equals 与 __ 的区别.html.ced2c662.js"><link rel="prefetch" href="/calos/assets/final_ finally_ finalize 的区别.html.4fca4872.js"><link rel="prefetch" href="/calos/assets/int 和 Integer 有什么区别.html.d7c2191c.js"><link rel="prefetch" href="/calos/assets/session 与 cookie 区别.html.e6f5cf31.js"><link rel="prefetch" href="/calos/assets/session 分布式处理.html.d9a5bdc3.js"><link rel="prefetch" href="/calos/assets/抽象类和接口有什么区别.html.21558884.js"><link rel="prefetch" href="/calos/assets/说说反射的用途及实现.html.056222e8.js"><link rel="prefetch" href="/calos/assets/说说自定义注解的场景及实现.html.534aaadb.js"><link rel="prefetch" href="/calos/assets/重载和重写的区别.html.6387ef0b.js"><link rel="prefetch" href="/calos/assets/面向对象的特征.html.233d0d1a.js"><link rel="prefetch" href="/calos/assets/ArrayList 与 LinkedList 区别.html.a50fd5ab.js"><link rel="prefetch" href="/calos/assets/ArrayList 与 Vector 区别.html.d9073131.js"><link rel="prefetch" href="/calos/assets/ConcurrentHashMap 的工作原理及代码实现.html.7eec60f1.js"><link rel="prefetch" href="/calos/assets/HashMap 和 ConcurrentHashMap 的区别.html.1e8a90fd.js"><link rel="prefetch" href="/calos/assets/HashMap 和 HashTable 的区别.html.74016310.js"><link rel="prefetch" href="/calos/assets/HashMap 的工作原理及代码实现.html.9a20be37.js"><link rel="prefetch" href="/calos/assets/HashSet 和 HashMap 区别.html.a08ea13f.js"><link rel="prefetch" href="/calos/assets/List 和 Map 区别.html.e5602d8b.js"><link rel="prefetch" href="/calos/assets/List 和 Set 区别.html.679ea3ef.js"><link rel="prefetch" href="/calos/assets/ThreadLocal 原理分析.html.23bee3bf.js"><link rel="prefetch" href="/calos/assets/sleep()、join（）、yield（）有什么区别.html.4bf20e5d.js"><link rel="prefetch" href="/calos/assets/创建线程的方式及实现.html.b8809502.js"><link rel="prefetch" href="/calos/assets/线程池的几种方式与使用场景.html.4fea0b35.js"><link rel="prefetch" href="/calos/assets/线程的生命周期.html.a7facb9b.js"><link rel="prefetch" href="/calos/assets/讲讲线程池的实现原理.html.1c185f2c.js"><link rel="prefetch" href="/calos/assets/说说 CountDownLatch 与 CyclicBarrier 区别.html.24efceb9.js"><link rel="prefetch" href="/calos/assets/说说 CountDownLatch 原理.html.b137424c.js"><link rel="prefetch" href="/calos/assets/说说 CyclicBarrier 原理.html.f49686fa.js"><link rel="prefetch" href="/calos/assets/说说 Exchanger 原理.html.136dd247.js"><link rel="prefetch" href="/calos/assets/说说 Semaphore 原理.html.c26a1d43.js"><link rel="prefetch" href="/calos/assets/01.说说线程安全问题.html.0c45ca49.js"><link rel="prefetch" href="/calos/assets/02.synchronize 实现原理.html.b4f44a1b.js"><link rel="prefetch" href="/calos/assets/03.synchronized 与 lock 的区别.html.b30da31d.js"><link rel="prefetch" href="/calos/assets/04.CAS 乐观锁.html.62c65095.js"><link rel="prefetch" href="/calos/assets/05.ABA 问题.html.f0fbba13.js"><link rel="prefetch" href="/calos/assets/06.乐观锁的业务场景及实现方式.html.1c647d21.js"><link rel="prefetch" href="/calos/assets/07.volatile 实现原理.html.b9f64706.js"><link rel="prefetch" href="/calos/assets/BeanFactory 和 ApplicationContext 有什么区别.html.a9ebebfa.js"><link rel="prefetch" href="/calos/assets/Spring AOP 实现原理.html.cd995f4c.js"><link rel="prefetch" href="/calos/assets/Spring Bean 的生命周期.html.4f45a157.js"><link rel="prefetch" href="/calos/assets/Spring IOC 如何实现.html.6d213922.js"><link rel="prefetch" href="/calos/assets/Spring MVC 启动流程.html.8e705676.js"><link rel="prefetch" href="/calos/assets/Spring MVC 运行流程.html.f77494b6.js"><link rel="prefetch" href="/calos/assets/Spring 事务实现方式.html.00d63f43.js"><link rel="prefetch" href="/calos/assets/Spring 事务底层原理.html.18505c33.js"><link rel="prefetch" href="/calos/assets/Spring 框架中用到了哪些设计模式.html.d4914174.js"><link rel="prefetch" href="/calos/assets/Spring 的单例实现原理.html.247b1453.js"><link rel="prefetch" href="/calos/assets/动态代理（CGLIB 与 JDK）.html.7a7457ae.js"><link rel="prefetch" href="/calos/assets/如何自定义注解实现功能.html.9e68d75c.js"><link rel="prefetch" href="/calos/assets/说说 Spring AOP.html.9dfc62f4.js"><link rel="prefetch" href="/calos/assets/Session 分布式方案.html.cb79f9be.js"><link rel="prefetch" href="/calos/assets/分布式事务.html.08748b5c.js"><link rel="prefetch" href="/calos/assets/分布式锁的场景与实现.html.924a3107.js"><link rel="prefetch" href="/calos/assets/谈谈业务中使用分布式的场景.html.6ad140b4.js"><link rel="prefetch" href="/calos/assets/集群与负载均衡的算法与实现.html.240f19dc.js"><link rel="prefetch" href="/calos/assets/你怎么理解 RESTful.html.9aa7a688.js"><link rel="prefetch" href="/calos/assets/你怎么理解 RPC 框架.html.6b8a2045.js"><link rel="prefetch" href="/calos/assets/前后端分离是如何做的.html.b4d76043.js"><link rel="prefetch" href="/calos/assets/如何保证接口的幂等性.html.eedfe7ce.js"><link rel="prefetch" href="/calos/assets/如何应对微服务的链式调用异常.html.d57de2a6.js"><link rel="prefetch" href="/calos/assets/如何拆分服务.html.ecb6723a.js"><link rel="prefetch" href="/calos/assets/如何理解 RESTful API 的幂等性.html.c34edc31.js"><link rel="prefetch" href="/calos/assets/如何解决跨域.html.4aa1a376.js"><link rel="prefetch" href="/calos/assets/对于快速追踪与定位问题.html.49e5a065.js"><link rel="prefetch" href="/calos/assets/微服务与 SOA 的区别.html.a0be7194.js"><link rel="prefetch" href="/calos/assets/微服务哪些框架.html.fcacd10d.js"><link rel="prefetch" href="/calos/assets/微服务如何进行数据库管理.html.336cdc45.js"><link rel="prefetch" href="/calos/assets/微服务的安全.html.a4fcbf8e.js"><link rel="prefetch" href="/calos/assets/怎么考虑数据一致性问题.html.a5ffe198.js"><link rel="prefetch" href="/calos/assets/说说 CAP 定理、 BASE 理论.html.f9ccee4e.js"><link rel="prefetch" href="/calos/assets/说说 Dubbo 的实现原理.html.807170fd.js"><link rel="prefetch" href="/calos/assets/说说 RPC 的实现原理.html.157a5733.js"><link rel="prefetch" href="/calos/assets/说说如何设计一个良好的 API.html.7aa7fd98.js"><link rel="prefetch" href="/calos/assets/说说最终一致性的实现方案.html.a7f8bb1c.js"><link rel="prefetch" href="/calos/assets/58 到家 MySQL 军规升级版.html.b22f01f3.js"><link rel="prefetch" href="/calos/assets/MySQL 索引使用的注意事项.html.c61e1a9b.js"><link rel="prefetch" href="/calos/assets/MySQL 遇到的死锁问题.html.06a693e9.js"><link rel="prefetch" href="/calos/assets/ObjectId 规则.html.1d64897f.js"><link rel="prefetch" href="/calos/assets/limit 20000 加载很慢怎么解决.html.e8116596.js"><link rel="prefetch" href="/calos/assets/为什么要用 B-Tree.html.78f482e3.js"><link rel="prefetch" href="/calos/assets/倒排索引.html.47ef3826.js"><link rel="prefetch" href="/calos/assets/分库与分表带来的分布式困境与应对之策.html.fba6f03a.js"><link rel="prefetch" href="/calos/assets/存储引擎的 InnoDB 与 MyiSAM.html.2c49bd3b.js"><link rel="prefetch" href="/calos/assets/数据库索引的原理.html.c70b4ac9.js"><link rel="prefetch" href="/calos/assets/聊聊 ElasticSearch 使用场景.html.c30c0210.js"><link rel="prefetch" href="/calos/assets/聊聊 MongoDB 使用场景.html.472e9ea2.js"><link rel="prefetch" href="/calos/assets/聚集索引与非聚集索引的区别.html.dca6d34c.js"><link rel="prefetch" href="/calos/assets/说说 SQL 优化之道.html.d8f2f3c2.js"><link rel="prefetch" href="/calos/assets/说说分库与分表设计.html.701ea4c6.js"><link rel="prefetch" href="/calos/assets/说说反模式设计.html.cbc0a641.js"><link rel="prefetch" href="/calos/assets/选择合适的分布式主键方案.html.a7f59960.js"><link rel="prefetch" href="/calos/assets/选择合适的数据存储方案.html.5363745a.js"><link rel="prefetch" href="/calos/assets/Redis 为什么是单线程的.html.a3c02dee.js"><link rel="prefetch" href="/calos/assets/Redis 内存淘汰机制.html.28f51ce5.js"><link rel="prefetch" href="/calos/assets/Redis 内部结构.html.aab17eb7.js"><link rel="prefetch" href="/calos/assets/Redis 持久化机制.html.3e027284.js"><link rel="prefetch" href="/calos/assets/Redis 有哪些类型.html.4139ce3b.js"><link rel="prefetch" href="/calos/assets/Redis 集群方案与实现.html.fc9706d1.js"><link rel="prefetch" href="/calos/assets/使用缓存的合理性问题.html.131955a5.js"><link rel="prefetch" href="/calos/assets/缓存崩溃.html.71decad2.js"><link rel="prefetch" href="/calos/assets/缓存降级.html.75fc0ecd.js"><link rel="prefetch" href="/calos/assets/聊聊 Redis 使用场景.html.01ea1287.js"><link rel="prefetch" href="/calos/assets/如何保证消息的有序性.html.e154596c.js"><link rel="prefetch" href="/calos/assets/消息的堆积解决思路.html.90ec0e25.js"><link rel="prefetch" href="/calos/assets/消息的幂等性解决思路.html.dd801055.js"><link rel="prefetch" href="/calos/assets/消息的重发补偿解决思路.html.c277616f.js"><link rel="prefetch" href="/calos/assets/消息队列的使用场景.html.3eea43d9.js"><link rel="prefetch" href="/calos/assets/自己如何实现消息队列.html.634152e2.js"><link rel="prefetch" href="/calos/assets/Netty 内部执行流程.html.2adaf582.js"><link rel="prefetch" href="/calos/assets/Netty 线程模型.html.fac32c2f.js"><link rel="prefetch" href="/calos/assets/Netty 重连实现.html.01c01b34.js"><link rel="prefetch" href="/calos/assets/TCP 粘包拆包的解决办法.html.45b45a7b.js"><link rel="prefetch" href="/calos/assets/为什么选择 Netty.html.26362e6a.js"><link rel="prefetch" href="/calos/assets/什么是 TCP 粘包拆包.html.339f26a9.js"><link rel="prefetch" href="/calos/assets/原生的 NIO 在 JDK 1.7 版本存在 EPoll BUG.html.721a8f6c.js"><link rel="prefetch" href="/calos/assets/说说 Netty 的零拷贝.html.4c4f2194.js"><link rel="prefetch" href="/calos/assets/说说业务中 Netty 的使用场景.html.7bbbc773.js"><link rel="prefetch" href="/calos/assets/HTTPS 原理剖析.html.c2c5e8c7.js"><link rel="prefetch" href="/calos/assets/HTTPS 降级攻击.html.545481b8.js"><link rel="prefetch" href="/calos/assets/基于角色的访问控制.html.74da01bb.js"><link rel="prefetch" href="/calos/assets/安全要素与 STRIDE 威胁.html.fc99c164.js"><link rel="prefetch" href="/calos/assets/授权与认证.html.2a2ae115.js"><link rel="prefetch" href="/calos/assets/防范常见的 Web 攻击.html.c3182ce0.js"><link rel="prefetch" href="/calos/assets/如何发现性能瓶颈.html.6d85545c.js"><link rel="prefetch" href="/calos/assets/性能指标有哪些.html.e668b606.js"><link rel="prefetch" href="/calos/assets/性能调优的常见手段.html.32b91a1c.js"><link rel="prefetch" href="/calos/assets/23 种设计模式的设计理念.html.c72aeb61.js"><link rel="prefetch" href="/calos/assets/设计模式之间的异同，例如策略模式与状态模式的区别.html.a7242f1e.js"><link rel="prefetch" href="/calos/assets/设计模式之间的结合，例如策略模式 _ 简单工厂模式的实践.html.8a8dcced.js"><link rel="prefetch" href="/calos/assets/设计模式的性能，例如单例模式哪种性能更好.html.1fc41f27.js"><link rel="prefetch" href="/calos/assets/说说你对设计原则的理解.html.4d640634.js"><link rel="prefetch" href="/calos/assets/说说常用开源框架中设计模式使用分析.html.764e5d5f.js"><link rel="prefetch" href="/calos/assets/你如何对需求原型进行理解和拆分.html.3833ba8f.js"><link rel="prefetch" href="/calos/assets/你如何理解用户痛点.html.ef8fc2f1.js"><link rel="prefetch" href="/calos/assets/你针对产品提出哪些交互和改进意见.html.27650a2a.js"><link rel="prefetch" href="/calos/assets/说说你对功能性需求的理解.html.0a210913.js"><link rel="prefetch" href="/calos/assets/说说你对非功能性需求的理解.html.f08521ef.js"><link rel="prefetch" href="/calos/assets/你如何划分领域边界.html.c9312ae0.js"><link rel="prefetch" href="/calos/assets/你如何考虑服务化.html.2b81f8cf.js"><link rel="prefetch" href="/calos/assets/你如何考虑组件化.html.69667337.js"><link rel="prefetch" href="/calos/assets/你如何进行领域建模.html.690adcd2.js"><link rel="prefetch" href="/calos/assets/说说你在项目中使用过的 UML 图.html.bcd3df96.js"><link rel="prefetch" href="/calos/assets/说说概要设计.html.23ba86cf.js"><link rel="prefetch" href="/calos/assets/JDK8 新特性.html.179387b9.js"><link rel="prefetch" href="/calos/assets/JavaScript this 关键字.html.d7519b39.js"><link rel="prefetch" href="/calos/assets/MySQL 优化.html.af766374.js"><link rel="prefetch" href="/calos/assets/Zookeeper 假死脑裂.html.c723f144.js"><link rel="prefetch" href="/calos/assets/双亲委派模型.html.cacf3581.js"><link rel="prefetch" href="/calos/assets/死信、延迟、重试队列.html.193604a7.js"><link rel="prefetch" href="/calos/assets/面试题补充.html.ce53e193.js"><link rel="prefetch" href="/calos/assets/404.html.b4eaed03.js"><link rel="prefetch" href="/calos/assets/404.d9328e95.js"><link rel="prefetch" href="/calos/assets/Layout.7a43bad6.js">
    <link rel="stylesheet" href="/calos/assets/style.3a5a5d5f.css">
  </head>
  <body>
    <div id="app"><!--[--><div class="theme-container"><!--[--><header class="navbar"><div class="toggle-sidebar-button" title="toggle sidebar" aria-expanded="false" role="button" tabindex="0"><div class="icon" aria-hidden="true"><span></span><span></span><span></span></div></div><span><a href="/calos/" class=""><img class="logo" src="https://vuejs.org/images/logo.png" alt="三更编程"><span class="site-name can-hide">三更编程</span></a></span><div class="navbar-items-wrapper" style=""><!--[--><!--]--><nav class="navbar-items can-hide"><!--[--><div class="navbar-item"><a href="/calos/面试宝典/" class="" aria-label="面试宝典"><!--[--><!--]--> 面试宝典 <!--[--><!--]--></a></div><div class="navbar-item"><a href="/calos/FQA/" class="" aria-label="问题集锦"><!--[--><!--]--> 问题集锦 <!--[--><!--]--></a></div><!--]--></nav><!--[--><!--]--><button class="toggle-dark-button" title="toggle dark mode"><svg style="" class="icon" focusable="false" viewBox="0 0 32 32"><path d="M16 12.005a4 4 0 1 1-4 4a4.005 4.005 0 0 1 4-4m0-2a6 6 0 1 0 6 6a6 6 0 0 0-6-6z" fill="currentColor"></path><path d="M5.394 6.813l1.414-1.415l3.506 3.506L8.9 10.318z" fill="currentColor"></path><path d="M2 15.005h5v2H2z" fill="currentColor"></path><path d="M5.394 25.197L8.9 21.691l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 25.005h2v5h-2z" fill="currentColor"></path><path d="M21.687 23.106l1.414-1.415l3.506 3.506l-1.414 1.414z" fill="currentColor"></path><path d="M25 15.005h5v2h-5z" fill="currentColor"></path><path d="M21.687 8.904l3.506-3.506l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 2.005h2v5h-2z" fill="currentColor"></path></svg><svg style="display:none;" class="icon" focusable="false" viewBox="0 0 32 32"><path d="M13.502 5.414a15.075 15.075 0 0 0 11.594 18.194a11.113 11.113 0 0 1-7.975 3.39c-.138 0-.278.005-.418 0a11.094 11.094 0 0 1-3.2-21.584M14.98 3a1.002 1.002 0 0 0-.175.016a13.096 13.096 0 0 0 1.825 25.981c.164.006.328 0 .49 0a13.072 13.072 0 0 0 10.703-5.555a1.01 1.01 0 0 0-.783-1.565A13.08 13.08 0 0 1 15.89 4.38A1.015 1.015 0 0 0 14.98 3z" fill="currentColor"></path></svg></button><!----></div></header><!--]--><div class="sidebar-mask"></div><!--[--><aside class="sidebar"><nav class="navbar-items"><!--[--><div class="navbar-item"><a href="/calos/面试宝典/" class="" aria-label="面试宝典"><!--[--><!--]--> 面试宝典 <!--[--><!--]--></a></div><div class="navbar-item"><a href="/calos/FQA/" class="" aria-label="问题集锦"><!--[--><!--]--> 问题集锦 <!--[--><!--]--></a></div><!--]--></nav><!--[--><!--]--><ul class="sidebar-items"><!--[--><li><p tabindex="0" class="sidebar-item sidebar-heading active">java基础 <!----></p><!--[--><ul style="" class="sidebar-item-children"><!--[--><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/00.java%E5%9F%BA%E7%A1%80/HTTP%20%E8%AF%B7%E6%B1%82%E7%9A%84%20GET%20%E4%B8%8E%20POST%20%E6%96%B9%E5%BC%8F%E7%9A%84%E5%8C%BA%E5%88%AB.html" class="sidebar-item" aria-label="HTTP 请求的 GET 与 POST 方式的区别"><!--[--><!--]--> HTTP 请求的 GET 与 POST 方式的区别 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/00.java%E5%9F%BA%E7%A1%80/JDBC%20%E6%B5%81%E7%A8%8B.html" class="router-link-active router-link-exact-active router-link-active sidebar-item active" aria-label="JDBC 流程"><!--[--><!--]--> JDBC 流程 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/00.java%E5%9F%BA%E7%A1%80/equals%20%E4%B8%8E%20==%20%E7%9A%84%E5%8C%BA%E5%88%AB.html" class="sidebar-item" aria-label="equals 与 == 的区别"><!--[--><!--]--> equals 与 == 的区别 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/00.java%E5%9F%BA%E7%A1%80/final,%20finally,%20finalize%20%E7%9A%84%E5%8C%BA%E5%88%AB.html" class="sidebar-item" aria-label="final, finally, finalize 的区别"><!--[--><!--]--> final, finally, finalize 的区别 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/00.java%E5%9F%BA%E7%A1%80/int%20%E5%92%8C%20Integer%20%E6%9C%89%E4%BB%80%E4%B9%88%E5%8C%BA%E5%88%AB.html" class="sidebar-item" aria-label="int 和 Integer 有什么区别"><!--[--><!--]--> int 和 Integer 有什么区别 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/00.java%E5%9F%BA%E7%A1%80/session%20%E4%B8%8E%20cookie%20%E5%8C%BA%E5%88%AB.html" class="sidebar-item" aria-label="session 与 cookie 区别"><!--[--><!--]--> session 与 cookie 区别 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/00.java%E5%9F%BA%E7%A1%80/session%20%E5%88%86%E5%B8%83%E5%BC%8F%E5%A4%84%E7%90%86.html" class="sidebar-item" aria-label="session 分布式处理"><!--[--><!--]--> session 分布式处理 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/00.java%E5%9F%BA%E7%A1%80/%E6%8A%BD%E8%B1%A1%E7%B1%BB%E5%92%8C%E6%8E%A5%E5%8F%A3%E6%9C%89%E4%BB%80%E4%B9%88%E5%8C%BA%E5%88%AB.html" class="sidebar-item" aria-label="抽象类和接口有什么区别"><!--[--><!--]--> 抽象类和接口有什么区别 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/00.java%E5%9F%BA%E7%A1%80/%E8%AF%B4%E8%AF%B4%E5%8F%8D%E5%B0%84%E7%9A%84%E7%94%A8%E9%80%94%E5%8F%8A%E5%AE%9E%E7%8E%B0.html" class="sidebar-item" aria-label="说说反射的用途及实现"><!--[--><!--]--> 说说反射的用途及实现 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/00.java%E5%9F%BA%E7%A1%80/%E8%AF%B4%E8%AF%B4%E8%87%AA%E5%AE%9A%E4%B9%89%E6%B3%A8%E8%A7%A3%E7%9A%84%E5%9C%BA%E6%99%AF%E5%8F%8A%E5%AE%9E%E7%8E%B0.html" class="sidebar-item" aria-label="说说自定义注解的场景及实现"><!--[--><!--]--> 说说自定义注解的场景及实现 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/00.java%E5%9F%BA%E7%A1%80/%E9%87%8D%E8%BD%BD%E5%92%8C%E9%87%8D%E5%86%99%E7%9A%84%E5%8C%BA%E5%88%AB.html" class="sidebar-item" aria-label="重载和重写的区别"><!--[--><!--]--> 重载和重写的区别 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/00.java%E5%9F%BA%E7%A1%80/%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E7%9A%84%E7%89%B9%E5%BE%81.html" class="sidebar-item" aria-label="面向对象的特征"><!--[--><!--]--> 面向对象的特征 <!--[--><!--]--></a><!----></li><!--]--></ul><!--]--></li><li><p tabindex="0" class="sidebar-item sidebar-heading">java集合 <!----></p><!--[--><ul style="" class="sidebar-item-children"><!--[--><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/01.java%E9%9B%86%E5%90%88/ArrayList%20%E4%B8%8E%20LinkedList%20%E5%8C%BA%E5%88%AB.html" class="sidebar-item" aria-label="ArrayList 与 LinkedList 区别"><!--[--><!--]--> ArrayList 与 LinkedList 区别 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/01.java%E9%9B%86%E5%90%88/ArrayList%20%E4%B8%8E%20Vector%20%E5%8C%BA%E5%88%AB.html" class="sidebar-item" aria-label="ArrayList 与 Vector 区别"><!--[--><!--]--> ArrayList 与 Vector 区别 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/01.java%E9%9B%86%E5%90%88/ConcurrentHashMap%20%E7%9A%84%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86%E5%8F%8A%E4%BB%A3%E7%A0%81%E5%AE%9E%E7%8E%B0.html" class="sidebar-item" aria-label="ConcurrentHashMap 的工作原理及代码实现"><!--[--><!--]--> ConcurrentHashMap 的工作原理及代码实现 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/01.java%E9%9B%86%E5%90%88/HashMap%20%E5%92%8C%20ConcurrentHashMap%20%E7%9A%84%E5%8C%BA%E5%88%AB.html" class="sidebar-item" aria-label="HashMap 和 ConcurrentHashMap 的区别"><!--[--><!--]--> HashMap 和 ConcurrentHashMap 的区别 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/01.java%E9%9B%86%E5%90%88/HashMap%20%E5%92%8C%20HashTable%20%E7%9A%84%E5%8C%BA%E5%88%AB.html" class="sidebar-item" aria-label="HashMap 和 HashTable 的区别"><!--[--><!--]--> HashMap 和 HashTable 的区别 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/01.java%E9%9B%86%E5%90%88/HashMap%20%E7%9A%84%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86%E5%8F%8A%E4%BB%A3%E7%A0%81%E5%AE%9E%E7%8E%B0.html" class="sidebar-item" aria-label="HashMap 的工作原理及代码实现"><!--[--><!--]--> HashMap 的工作原理及代码实现 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/01.java%E9%9B%86%E5%90%88/HashSet%20%E5%92%8C%20HashMap%20%E5%8C%BA%E5%88%AB.html" class="sidebar-item" aria-label="HashSet 和 HashMap 区别"><!--[--><!--]--> HashSet 和 HashMap 区别 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/01.java%E9%9B%86%E5%90%88/List%20%E5%92%8C%20Map%20%E5%8C%BA%E5%88%AB.html" class="sidebar-item" aria-label="List 和 Map 区别"><!--[--><!--]--> List 和 Map 区别 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/01.java%E9%9B%86%E5%90%88/List%20%E5%92%8C%20Set%20%E5%8C%BA%E5%88%AB.html" class="sidebar-item" aria-label="List 和 Set 区别"><!--[--><!--]--> List 和 Set 区别 <!--[--><!--]--></a><!----></li><!--]--></ul><!--]--></li><li><p tabindex="0" class="sidebar-item sidebar-heading">Java 线程 <!----></p><!--[--><ul style="" class="sidebar-item-children"><!--[--><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/02.Java%20%E7%BA%BF%E7%A8%8B/ThreadLocal%20%E5%8E%9F%E7%90%86%E5%88%86%E6%9E%90.html" class="sidebar-item" aria-label="ThreadLocal 原理分析"><!--[--><!--]--> ThreadLocal 原理分析 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/02.Java%20%E7%BA%BF%E7%A8%8B/sleep()%E3%80%81join%EF%BC%88%EF%BC%89%E3%80%81yield%EF%BC%88%EF%BC%89%E6%9C%89%E4%BB%80%E4%B9%88%E5%8C%BA%E5%88%AB.html" class="sidebar-item" aria-label="sleep()、join（）、yield（）有什么区别"><!--[--><!--]--> sleep()、join（）、yield（）有什么区别 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/02.Java%20%E7%BA%BF%E7%A8%8B/%E5%88%9B%E5%BB%BA%E7%BA%BF%E7%A8%8B%E7%9A%84%E6%96%B9%E5%BC%8F%E5%8F%8A%E5%AE%9E%E7%8E%B0.html" class="sidebar-item" aria-label="创建线程的方式及实现"><!--[--><!--]--> 创建线程的方式及实现 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/02.Java%20%E7%BA%BF%E7%A8%8B/%E7%BA%BF%E7%A8%8B%E6%B1%A0%E7%9A%84%E5%87%A0%E7%A7%8D%E6%96%B9%E5%BC%8F%E4%B8%8E%E4%BD%BF%E7%94%A8%E5%9C%BA%E6%99%AF.html" class="sidebar-item" aria-label="线程池的几种方式与使用场景"><!--[--><!--]--> 线程池的几种方式与使用场景 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/02.Java%20%E7%BA%BF%E7%A8%8B/%E7%BA%BF%E7%A8%8B%E7%9A%84%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F.html" class="sidebar-item" aria-label="线程的生命周期"><!--[--><!--]--> 线程的生命周期 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/02.Java%20%E7%BA%BF%E7%A8%8B/%E8%AE%B2%E8%AE%B2%E7%BA%BF%E7%A8%8B%E6%B1%A0%E7%9A%84%E5%AE%9E%E7%8E%B0%E5%8E%9F%E7%90%86.html" class="sidebar-item" aria-label="讲讲线程池的实现原理"><!--[--><!--]--> 讲讲线程池的实现原理 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/02.Java%20%E7%BA%BF%E7%A8%8B/%E8%AF%B4%E8%AF%B4%20CountDownLatch%20%E4%B8%8E%20CyclicBarrier%20%E5%8C%BA%E5%88%AB.html" class="sidebar-item" aria-label="说说 CountDownLatch 与 CyclicBarrier 区别"><!--[--><!--]--> 说说 CountDownLatch 与 CyclicBarrier 区别 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/02.Java%20%E7%BA%BF%E7%A8%8B/%E8%AF%B4%E8%AF%B4%20CountDownLatch%20%E5%8E%9F%E7%90%86.html" class="sidebar-item" aria-label="说说 CountDownLatch 原理"><!--[--><!--]--> 说说 CountDownLatch 原理 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/02.Java%20%E7%BA%BF%E7%A8%8B/%E8%AF%B4%E8%AF%B4%20CyclicBarrier%20%E5%8E%9F%E7%90%86.html" class="sidebar-item" aria-label="说说 CyclicBarrier 原理"><!--[--><!--]--> 说说 CyclicBarrier 原理 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/02.Java%20%E7%BA%BF%E7%A8%8B/%E8%AF%B4%E8%AF%B4%20Exchanger%20%E5%8E%9F%E7%90%86.html" class="sidebar-item" aria-label="说说 Exchanger 原理"><!--[--><!--]--> 说说 Exchanger 原理 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/02.Java%20%E7%BA%BF%E7%A8%8B/%E8%AF%B4%E8%AF%B4%20Semaphore%20%E5%8E%9F%E7%90%86.html" class="sidebar-item" aria-label="说说 Semaphore 原理"><!--[--><!--]--> 说说 Semaphore 原理 <!--[--><!--]--></a><!----></li><!--]--></ul><!--]--></li><li><p tabindex="0" class="sidebar-item sidebar-heading">Java 锁机制 <!----></p><!--[--><ul style="" class="sidebar-item-children"><!--[--><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/03.Java%20%E9%94%81%E6%9C%BA%E5%88%B6/01.%E8%AF%B4%E8%AF%B4%E7%BA%BF%E7%A8%8B%E5%AE%89%E5%85%A8%E9%97%AE%E9%A2%98.html" class="sidebar-item" aria-label="说说线程安全问题"><!--[--><!--]--> 说说线程安全问题 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/03.Java%20%E9%94%81%E6%9C%BA%E5%88%B6/02.synchronize%20%E5%AE%9E%E7%8E%B0%E5%8E%9F%E7%90%86.html" class="sidebar-item" aria-label="synchronize 实现原理"><!--[--><!--]--> synchronize 实现原理 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/03.Java%20%E9%94%81%E6%9C%BA%E5%88%B6/03.synchronized%20%E4%B8%8E%20lock%20%E7%9A%84%E5%8C%BA%E5%88%AB.html" class="sidebar-item" aria-label="synchronized 与 lock 的区别"><!--[--><!--]--> synchronized 与 lock 的区别 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/03.Java%20%E9%94%81%E6%9C%BA%E5%88%B6/04.CAS%20%E4%B9%90%E8%A7%82%E9%94%81.html" class="sidebar-item" aria-label="CAS 乐观锁"><!--[--><!--]--> CAS 乐观锁 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/03.Java%20%E9%94%81%E6%9C%BA%E5%88%B6/05.ABA%20%E9%97%AE%E9%A2%98.html" class="sidebar-item" aria-label="ABA问题"><!--[--><!--]--> ABA问题 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/03.Java%20%E9%94%81%E6%9C%BA%E5%88%B6/06.%E4%B9%90%E8%A7%82%E9%94%81%E7%9A%84%E4%B8%9A%E5%8A%A1%E5%9C%BA%E6%99%AF%E5%8F%8A%E5%AE%9E%E7%8E%B0%E6%96%B9%E5%BC%8F.html" class="sidebar-item" aria-label="乐观锁的业务场景及实现方式"><!--[--><!--]--> 乐观锁的业务场景及实现方式 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/03.Java%20%E9%94%81%E6%9C%BA%E5%88%B6/07.volatile%20%E5%AE%9E%E7%8E%B0%E5%8E%9F%E7%90%86.html" class="sidebar-item" aria-label="volatile 实现原理"><!--[--><!--]--> volatile 实现原理 <!--[--><!--]--></a><!----></li><!--]--></ul><!--]--></li><li><p tabindex="0" class="sidebar-item sidebar-heading">Spring <!----></p><!--[--><ul style="" class="sidebar-item-children"><!--[--><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/04.Spring/BeanFactory%20%E5%92%8C%20ApplicationContext%20%E6%9C%89%E4%BB%80%E4%B9%88%E5%8C%BA%E5%88%AB.html" class="sidebar-item" aria-label="BeanFactory 和 ApplicationContext 有什么区别"><!--[--><!--]--> BeanFactory 和 ApplicationContext 有什么区别 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/04.Spring/Spring%20AOP%20%E5%AE%9E%E7%8E%B0%E5%8E%9F%E7%90%86.html" class="sidebar-item" aria-label="Spring AOP 实现原理"><!--[--><!--]--> Spring AOP 实现原理 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/04.Spring/Spring%20Bean%20%E7%9A%84%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F.html" class="sidebar-item" aria-label="Spring Bean 的生命周期"><!--[--><!--]--> Spring Bean 的生命周期 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/04.Spring/Spring%20IOC%20%E5%A6%82%E4%BD%95%E5%AE%9E%E7%8E%B0.html" class="sidebar-item" aria-label="Spring IOC 如何实现"><!--[--><!--]--> Spring IOC 如何实现 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/04.Spring/Spring%20MVC%20%E5%90%AF%E5%8A%A8%E6%B5%81%E7%A8%8B.html" class="sidebar-item" aria-label="Spring MVC 启动流程"><!--[--><!--]--> Spring MVC 启动流程 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/04.Spring/Spring%20MVC%20%E8%BF%90%E8%A1%8C%E6%B5%81%E7%A8%8B.html" class="sidebar-item" aria-label="Spring MVC 运行流程"><!--[--><!--]--> Spring MVC 运行流程 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/04.Spring/Spring%20%E4%BA%8B%E5%8A%A1%E5%AE%9E%E7%8E%B0%E6%96%B9%E5%BC%8F.html" class="sidebar-item" aria-label="Spring 事务实现方式"><!--[--><!--]--> Spring 事务实现方式 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/04.Spring/Spring%20%E4%BA%8B%E5%8A%A1%E5%BA%95%E5%B1%82%E5%8E%9F%E7%90%86.html" class="sidebar-item" aria-label="Spring 事务底层原理"><!--[--><!--]--> Spring 事务底层原理 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/04.Spring/Spring%20%E6%A1%86%E6%9E%B6%E4%B8%AD%E7%94%A8%E5%88%B0%E4%BA%86%E5%93%AA%E4%BA%9B%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F.html" class="sidebar-item" aria-label="Spring 框架中用到了哪些设计模式"><!--[--><!--]--> Spring 框架中用到了哪些设计模式 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/04.Spring/Spring%20%E7%9A%84%E5%8D%95%E4%BE%8B%E5%AE%9E%E7%8E%B0%E5%8E%9F%E7%90%86.html" class="sidebar-item" aria-label="Spring 的单例实现原理"><!--[--><!--]--> Spring 的单例实现原理 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/04.Spring/%E5%8A%A8%E6%80%81%E4%BB%A3%E7%90%86%EF%BC%88CGLIB%20%E4%B8%8E%20JDK%EF%BC%89.html" class="sidebar-item" aria-label="动态代理（CGLIB 与 JDK）"><!--[--><!--]--> 动态代理（CGLIB 与 JDK） <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/04.Spring/%E5%A6%82%E4%BD%95%E8%87%AA%E5%AE%9A%E4%B9%89%E6%B3%A8%E8%A7%A3%E5%AE%9E%E7%8E%B0%E5%8A%9F%E8%83%BD.html" class="sidebar-item" aria-label="如何自定义注解实现功能"><!--[--><!--]--> 如何自定义注解实现功能 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/04.Spring/%E8%AF%B4%E8%AF%B4%20Spring%20AOP.html" class="sidebar-item" aria-label="说说 Spring AOP"><!--[--><!--]--> 说说 Spring AOP <!--[--><!--]--></a><!----></li><!--]--></ul><!--]--></li><li><p tabindex="0" class="sidebar-item sidebar-heading">分布式 <!----></p><!--[--><ul style="" class="sidebar-item-children"><!--[--><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/05.%E5%88%86%E5%B8%83%E5%BC%8F/Session%20%E5%88%86%E5%B8%83%E5%BC%8F%E6%96%B9%E6%A1%88.html" class="sidebar-item" aria-label="Session 分布式方案"><!--[--><!--]--> Session 分布式方案 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/05.%E5%88%86%E5%B8%83%E5%BC%8F/%E5%88%86%E5%B8%83%E5%BC%8F%E4%BA%8B%E5%8A%A1.html" class="sidebar-item" aria-label="分布式事务"><!--[--><!--]--> 分布式事务 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/05.%E5%88%86%E5%B8%83%E5%BC%8F/%E5%88%86%E5%B8%83%E5%BC%8F%E9%94%81%E7%9A%84%E5%9C%BA%E6%99%AF%E4%B8%8E%E5%AE%9E%E7%8E%B0.html" class="sidebar-item" aria-label="分布式锁的场景与实现"><!--[--><!--]--> 分布式锁的场景与实现 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/05.%E5%88%86%E5%B8%83%E5%BC%8F/%E8%B0%88%E8%B0%88%E4%B8%9A%E5%8A%A1%E4%B8%AD%E4%BD%BF%E7%94%A8%E5%88%86%E5%B8%83%E5%BC%8F%E7%9A%84%E5%9C%BA%E6%99%AF.html" class="sidebar-item" aria-label="谈谈业务中使用分布式的场景"><!--[--><!--]--> 谈谈业务中使用分布式的场景 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/05.%E5%88%86%E5%B8%83%E5%BC%8F/%E9%9B%86%E7%BE%A4%E4%B8%8E%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1%E7%9A%84%E7%AE%97%E6%B3%95%E4%B8%8E%E5%AE%9E%E7%8E%B0.html" class="sidebar-item" aria-label="集群与负载均衡的算法与实现"><!--[--><!--]--> 集群与负载均衡的算法与实现 <!--[--><!--]--></a><!----></li><!--]--></ul><!--]--></li><li><p tabindex="0" class="sidebar-item sidebar-heading">微服务 <!----></p><!--[--><ul style="" class="sidebar-item-children"><!--[--><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/06.%E5%BE%AE%E6%9C%8D%E5%8A%A1/%E4%BD%A0%E6%80%8E%E4%B9%88%E7%90%86%E8%A7%A3%20RESTful.html" class="sidebar-item" aria-label="你怎么理解 RESTful"><!--[--><!--]--> 你怎么理解 RESTful <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/06.%E5%BE%AE%E6%9C%8D%E5%8A%A1/%E4%BD%A0%E6%80%8E%E4%B9%88%E7%90%86%E8%A7%A3%20RPC%20%E6%A1%86%E6%9E%B6.html" class="sidebar-item" aria-label="你怎么理解 RPC 框架"><!--[--><!--]--> 你怎么理解 RPC 框架 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/06.%E5%BE%AE%E6%9C%8D%E5%8A%A1/%E5%89%8D%E5%90%8E%E7%AB%AF%E5%88%86%E7%A6%BB%E6%98%AF%E5%A6%82%E4%BD%95%E5%81%9A%E7%9A%84.html" class="sidebar-item" aria-label="前后端分离是如何做的"><!--[--><!--]--> 前后端分离是如何做的 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/06.%E5%BE%AE%E6%9C%8D%E5%8A%A1/%E5%A6%82%E4%BD%95%E4%BF%9D%E8%AF%81%E6%8E%A5%E5%8F%A3%E7%9A%84%E5%B9%82%E7%AD%89%E6%80%A7.html" class="sidebar-item" aria-label="如何保证接口的幂等性"><!--[--><!--]--> 如何保证接口的幂等性 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/06.%E5%BE%AE%E6%9C%8D%E5%8A%A1/%E5%A6%82%E4%BD%95%E5%BA%94%E5%AF%B9%E5%BE%AE%E6%9C%8D%E5%8A%A1%E7%9A%84%E9%93%BE%E5%BC%8F%E8%B0%83%E7%94%A8%E5%BC%82%E5%B8%B8.html" class="sidebar-item" aria-label="如何应对微服务的链式调用异常"><!--[--><!--]--> 如何应对微服务的链式调用异常 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/06.%E5%BE%AE%E6%9C%8D%E5%8A%A1/%E5%A6%82%E4%BD%95%E6%8B%86%E5%88%86%E6%9C%8D%E5%8A%A1.html" class="sidebar-item" aria-label="如何拆分服务"><!--[--><!--]--> 如何拆分服务 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/06.%E5%BE%AE%E6%9C%8D%E5%8A%A1/%E5%A6%82%E4%BD%95%E7%90%86%E8%A7%A3%20RESTful%20API%20%E7%9A%84%E5%B9%82%E7%AD%89%E6%80%A7.html" class="sidebar-item" aria-label="如何理解 RESTful API 的幂等性"><!--[--><!--]--> 如何理解 RESTful API 的幂等性 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/06.%E5%BE%AE%E6%9C%8D%E5%8A%A1/%E5%A6%82%E4%BD%95%E8%A7%A3%E5%86%B3%E8%B7%A8%E5%9F%9F.html" class="sidebar-item" aria-label="如何解决跨域"><!--[--><!--]--> 如何解决跨域 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/06.%E5%BE%AE%E6%9C%8D%E5%8A%A1/%E5%AF%B9%E4%BA%8E%E5%BF%AB%E9%80%9F%E8%BF%BD%E8%B8%AA%E4%B8%8E%E5%AE%9A%E4%BD%8D%E9%97%AE%E9%A2%98.html" class="sidebar-item" aria-label="对于快速追踪与定位问题"><!--[--><!--]--> 对于快速追踪与定位问题 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/06.%E5%BE%AE%E6%9C%8D%E5%8A%A1/%E5%BE%AE%E6%9C%8D%E5%8A%A1%E4%B8%8E%20SOA%20%E7%9A%84%E5%8C%BA%E5%88%AB.html" class="sidebar-item" aria-label="微服务与 SOA 的区别"><!--[--><!--]--> 微服务与 SOA 的区别 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/06.%E5%BE%AE%E6%9C%8D%E5%8A%A1/%E5%BE%AE%E6%9C%8D%E5%8A%A1%E5%93%AA%E4%BA%9B%E6%A1%86%E6%9E%B6.html" class="sidebar-item" aria-label="微服务哪些框架"><!--[--><!--]--> 微服务哪些框架 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/06.%E5%BE%AE%E6%9C%8D%E5%8A%A1/%E5%BE%AE%E6%9C%8D%E5%8A%A1%E5%A6%82%E4%BD%95%E8%BF%9B%E8%A1%8C%E6%95%B0%E6%8D%AE%E5%BA%93%E7%AE%A1%E7%90%86.html" class="sidebar-item" aria-label="微服务如何进行数据库管理"><!--[--><!--]--> 微服务如何进行数据库管理 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/06.%E5%BE%AE%E6%9C%8D%E5%8A%A1/%E5%BE%AE%E6%9C%8D%E5%8A%A1%E7%9A%84%E5%AE%89%E5%85%A8.html" class="sidebar-item" aria-label="微服务的安全"><!--[--><!--]--> 微服务的安全 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/06.%E5%BE%AE%E6%9C%8D%E5%8A%A1/%E6%80%8E%E4%B9%88%E8%80%83%E8%99%91%E6%95%B0%E6%8D%AE%E4%B8%80%E8%87%B4%E6%80%A7%E9%97%AE%E9%A2%98.html" class="sidebar-item" aria-label="怎么考虑数据一致性问题"><!--[--><!--]--> 怎么考虑数据一致性问题 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/06.%E5%BE%AE%E6%9C%8D%E5%8A%A1/%E8%AF%B4%E8%AF%B4%20CAP%20%E5%AE%9A%E7%90%86%E3%80%81%20BASE%20%E7%90%86%E8%AE%BA.html" class="sidebar-item" aria-label="说说 CAP 定理、 BASE 理论"><!--[--><!--]--> 说说 CAP 定理、 BASE 理论 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/06.%E5%BE%AE%E6%9C%8D%E5%8A%A1/%E8%AF%B4%E8%AF%B4%20Dubbo%20%E7%9A%84%E5%AE%9E%E7%8E%B0%E5%8E%9F%E7%90%86.html" class="sidebar-item" aria-label="说说 Dubbo 的实现原理"><!--[--><!--]--> 说说 Dubbo 的实现原理 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/06.%E5%BE%AE%E6%9C%8D%E5%8A%A1/%E8%AF%B4%E8%AF%B4%20RPC%20%E7%9A%84%E5%AE%9E%E7%8E%B0%E5%8E%9F%E7%90%86.html" class="sidebar-item" aria-label="说说 RPC 的实现原理"><!--[--><!--]--> 说说 RPC 的实现原理 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/06.%E5%BE%AE%E6%9C%8D%E5%8A%A1/%E8%AF%B4%E8%AF%B4%E5%A6%82%E4%BD%95%E8%AE%BE%E8%AE%A1%E4%B8%80%E4%B8%AA%E8%89%AF%E5%A5%BD%E7%9A%84%20API.html" class="sidebar-item" aria-label="说说如何设计一个良好的 API"><!--[--><!--]--> 说说如何设计一个良好的 API <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/06.%E5%BE%AE%E6%9C%8D%E5%8A%A1/%E8%AF%B4%E8%AF%B4%E6%9C%80%E7%BB%88%E4%B8%80%E8%87%B4%E6%80%A7%E7%9A%84%E5%AE%9E%E7%8E%B0%E6%96%B9%E6%A1%88.html" class="sidebar-item" aria-label="说说最终一致性的实现方案"><!--[--><!--]--> 说说最终一致性的实现方案 <!--[--><!--]--></a><!----></li><!--]--></ul><!--]--></li><li><p tabindex="0" class="sidebar-item sidebar-heading">数据存储 <!----></p><!--[--><ul style="" class="sidebar-item-children"><!--[--><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/07.%E6%95%B0%E6%8D%AE%E5%AD%98%E5%82%A8/58%20%E5%88%B0%E5%AE%B6%20MySQL%20%E5%86%9B%E8%A7%84%E5%8D%87%E7%BA%A7%E7%89%88.html" class="sidebar-item" aria-label="58 到家 MySQL 军规升级版"><!--[--><!--]--> 58 到家 MySQL 军规升级版 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/07.%E6%95%B0%E6%8D%AE%E5%AD%98%E5%82%A8/MySQL%20%E7%B4%A2%E5%BC%95%E4%BD%BF%E7%94%A8%E7%9A%84%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9.html" class="sidebar-item" aria-label="MySQL 索引使用的注意事项"><!--[--><!--]--> MySQL 索引使用的注意事项 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/07.%E6%95%B0%E6%8D%AE%E5%AD%98%E5%82%A8/MySQL%20%E9%81%87%E5%88%B0%E7%9A%84%E6%AD%BB%E9%94%81%E9%97%AE%E9%A2%98.html" class="sidebar-item" aria-label="MySQL 遇到的死锁问题"><!--[--><!--]--> MySQL 遇到的死锁问题 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/07.%E6%95%B0%E6%8D%AE%E5%AD%98%E5%82%A8/ObjectId%20%E8%A7%84%E5%88%99.html" class="sidebar-item" aria-label="ObjectId 规则"><!--[--><!--]--> ObjectId 规则 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/07.%E6%95%B0%E6%8D%AE%E5%AD%98%E5%82%A8/limit%2020000%20%E5%8A%A0%E8%BD%BD%E5%BE%88%E6%85%A2%E6%80%8E%E4%B9%88%E8%A7%A3%E5%86%B3.html" class="sidebar-item" aria-label="limit 20000 加载很慢怎么解决"><!--[--><!--]--> limit 20000 加载很慢怎么解决 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/07.%E6%95%B0%E6%8D%AE%E5%AD%98%E5%82%A8/%E4%B8%BA%E4%BB%80%E4%B9%88%E8%A6%81%E7%94%A8%20B-Tree.html" class="sidebar-item" aria-label="为什么要用 B-Tree"><!--[--><!--]--> 为什么要用 B-Tree <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/07.%E6%95%B0%E6%8D%AE%E5%AD%98%E5%82%A8/%E5%80%92%E6%8E%92%E7%B4%A2%E5%BC%95.html" class="sidebar-item" aria-label="倒排索引"><!--[--><!--]--> 倒排索引 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/07.%E6%95%B0%E6%8D%AE%E5%AD%98%E5%82%A8/%E5%88%86%E5%BA%93%E4%B8%8E%E5%88%86%E8%A1%A8%E5%B8%A6%E6%9D%A5%E7%9A%84%E5%88%86%E5%B8%83%E5%BC%8F%E5%9B%B0%E5%A2%83%E4%B8%8E%E5%BA%94%E5%AF%B9%E4%B9%8B%E7%AD%96.html" class="sidebar-item" aria-label="分库与分表带来的分布式困境与应对之策"><!--[--><!--]--> 分库与分表带来的分布式困境与应对之策 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/07.%E6%95%B0%E6%8D%AE%E5%AD%98%E5%82%A8/%E5%AD%98%E5%82%A8%E5%BC%95%E6%93%8E%E7%9A%84%20InnoDB%20%E4%B8%8E%20MyiSAM.html" class="sidebar-item" aria-label="存储引擎的 InnoDB 与 MyiSAM"><!--[--><!--]--> 存储引擎的 InnoDB 与 MyiSAM <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/07.%E6%95%B0%E6%8D%AE%E5%AD%98%E5%82%A8/%E6%95%B0%E6%8D%AE%E5%BA%93%E7%B4%A2%E5%BC%95%E7%9A%84%E5%8E%9F%E7%90%86.html" class="sidebar-item" aria-label="数据库索引的原理"><!--[--><!--]--> 数据库索引的原理 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/07.%E6%95%B0%E6%8D%AE%E5%AD%98%E5%82%A8/%E8%81%8A%E8%81%8A%20ElasticSearch%20%E4%BD%BF%E7%94%A8%E5%9C%BA%E6%99%AF.html" class="sidebar-item" aria-label="聊聊 ElasticSearch 使用场景"><!--[--><!--]--> 聊聊 ElasticSearch 使用场景 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/07.%E6%95%B0%E6%8D%AE%E5%AD%98%E5%82%A8/%E8%81%8A%E8%81%8A%20MongoDB%20%E4%BD%BF%E7%94%A8%E5%9C%BA%E6%99%AF.html" class="sidebar-item" aria-label="聊聊 MongoDB 使用场景"><!--[--><!--]--> 聊聊 MongoDB 使用场景 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/07.%E6%95%B0%E6%8D%AE%E5%AD%98%E5%82%A8/%E8%81%9A%E9%9B%86%E7%B4%A2%E5%BC%95%E4%B8%8E%E9%9D%9E%E8%81%9A%E9%9B%86%E7%B4%A2%E5%BC%95%E7%9A%84%E5%8C%BA%E5%88%AB.html" class="sidebar-item" aria-label="聚集索引与非聚集索引的区别"><!--[--><!--]--> 聚集索引与非聚集索引的区别 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/07.%E6%95%B0%E6%8D%AE%E5%AD%98%E5%82%A8/%E8%AF%B4%E8%AF%B4%20SQL%20%E4%BC%98%E5%8C%96%E4%B9%8B%E9%81%93.html" class="sidebar-item" aria-label="说说 SQL 优化之道"><!--[--><!--]--> 说说 SQL 优化之道 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/07.%E6%95%B0%E6%8D%AE%E5%AD%98%E5%82%A8/%E8%AF%B4%E8%AF%B4%E5%88%86%E5%BA%93%E4%B8%8E%E5%88%86%E8%A1%A8%E8%AE%BE%E8%AE%A1.html" class="sidebar-item" aria-label="说说分库与分表设计"><!--[--><!--]--> 说说分库与分表设计 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/07.%E6%95%B0%E6%8D%AE%E5%AD%98%E5%82%A8/%E8%AF%B4%E8%AF%B4%E5%8F%8D%E6%A8%A1%E5%BC%8F%E8%AE%BE%E8%AE%A1.html" class="sidebar-item" aria-label="说说反模式设计"><!--[--><!--]--> 说说反模式设计 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/07.%E6%95%B0%E6%8D%AE%E5%AD%98%E5%82%A8/%E9%80%89%E6%8B%A9%E5%90%88%E9%80%82%E7%9A%84%E5%88%86%E5%B8%83%E5%BC%8F%E4%B8%BB%E9%94%AE%E6%96%B9%E6%A1%88.html" class="sidebar-item" aria-label="选择合适的分布式主键方案"><!--[--><!--]--> 选择合适的分布式主键方案 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/07.%E6%95%B0%E6%8D%AE%E5%AD%98%E5%82%A8/%E9%80%89%E6%8B%A9%E5%90%88%E9%80%82%E7%9A%84%E6%95%B0%E6%8D%AE%E5%AD%98%E5%82%A8%E6%96%B9%E6%A1%88.html" class="sidebar-item" aria-label="选择合适的数据存储方案"><!--[--><!--]--> 选择合适的数据存储方案 <!--[--><!--]--></a><!----></li><!--]--></ul><!--]--></li><li><p tabindex="0" class="sidebar-item sidebar-heading">缓存 <!----></p><!--[--><ul style="" class="sidebar-item-children"><!--[--><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/08.%E7%BC%93%E5%AD%98/Redis%20%E4%B8%BA%E4%BB%80%E4%B9%88%E6%98%AF%E5%8D%95%E7%BA%BF%E7%A8%8B%E7%9A%84.html" class="sidebar-item" aria-label="Redis 为什么是单线程的"><!--[--><!--]--> Redis 为什么是单线程的 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/08.%E7%BC%93%E5%AD%98/Redis%20%E5%86%85%E5%AD%98%E6%B7%98%E6%B1%B0%E6%9C%BA%E5%88%B6.html" class="sidebar-item" aria-label="Redis 内存淘汰机制"><!--[--><!--]--> Redis 内存淘汰机制 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/08.%E7%BC%93%E5%AD%98/Redis%20%E5%86%85%E9%83%A8%E7%BB%93%E6%9E%84.html" class="sidebar-item" aria-label="Redis 内部结构"><!--[--><!--]--> Redis 内部结构 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/08.%E7%BC%93%E5%AD%98/Redis%20%E6%8C%81%E4%B9%85%E5%8C%96%E6%9C%BA%E5%88%B6.html" class="sidebar-item" aria-label="Redis 持久化机制"><!--[--><!--]--> Redis 持久化机制 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/08.%E7%BC%93%E5%AD%98/Redis%20%E6%9C%89%E5%93%AA%E4%BA%9B%E7%B1%BB%E5%9E%8B.html" class="sidebar-item" aria-label="Redis 有哪些类型"><!--[--><!--]--> Redis 有哪些类型 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/08.%E7%BC%93%E5%AD%98/Redis%20%E9%9B%86%E7%BE%A4%E6%96%B9%E6%A1%88%E4%B8%8E%E5%AE%9E%E7%8E%B0.html" class="sidebar-item" aria-label="Redis 集群方案与实现"><!--[--><!--]--> Redis 集群方案与实现 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/08.%E7%BC%93%E5%AD%98/%E4%BD%BF%E7%94%A8%E7%BC%93%E5%AD%98%E7%9A%84%E5%90%88%E7%90%86%E6%80%A7%E9%97%AE%E9%A2%98.html" class="sidebar-item" aria-label="使用缓存的合理性问题"><!--[--><!--]--> 使用缓存的合理性问题 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/08.%E7%BC%93%E5%AD%98/%E7%BC%93%E5%AD%98%E5%B4%A9%E6%BA%83.html" class="sidebar-item" aria-label="缓存崩溃"><!--[--><!--]--> 缓存崩溃 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/08.%E7%BC%93%E5%AD%98/%E7%BC%93%E5%AD%98%E9%99%8D%E7%BA%A7.html" class="sidebar-item" aria-label="缓存降级"><!--[--><!--]--> 缓存降级 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/08.%E7%BC%93%E5%AD%98/%E8%81%8A%E8%81%8A%20Redis%20%E4%BD%BF%E7%94%A8%E5%9C%BA%E6%99%AF.html" class="sidebar-item" aria-label="聊聊 Redis 使用场景"><!--[--><!--]--> 聊聊 Redis 使用场景 <!--[--><!--]--></a><!----></li><!--]--></ul><!--]--></li><li><p tabindex="0" class="sidebar-item sidebar-heading">消息队列 <!----></p><!--[--><ul style="" class="sidebar-item-children"><!--[--><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/09.%E6%B6%88%E6%81%AF%E9%98%9F%E5%88%97/%E5%A6%82%E4%BD%95%E4%BF%9D%E8%AF%81%E6%B6%88%E6%81%AF%E7%9A%84%E6%9C%89%E5%BA%8F%E6%80%A7.html" class="sidebar-item" aria-label="如何保证消息的有序性"><!--[--><!--]--> 如何保证消息的有序性 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/09.%E6%B6%88%E6%81%AF%E9%98%9F%E5%88%97/%E6%B6%88%E6%81%AF%E7%9A%84%E5%A0%86%E7%A7%AF%E8%A7%A3%E5%86%B3%E6%80%9D%E8%B7%AF.html" class="sidebar-item" aria-label="消息的堆积解决思路"><!--[--><!--]--> 消息的堆积解决思路 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/09.%E6%B6%88%E6%81%AF%E9%98%9F%E5%88%97/%E6%B6%88%E6%81%AF%E7%9A%84%E5%B9%82%E7%AD%89%E6%80%A7%E8%A7%A3%E5%86%B3%E6%80%9D%E8%B7%AF.html" class="sidebar-item" aria-label="消息的幂等性解决思路"><!--[--><!--]--> 消息的幂等性解决思路 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/09.%E6%B6%88%E6%81%AF%E9%98%9F%E5%88%97/%E6%B6%88%E6%81%AF%E7%9A%84%E9%87%8D%E5%8F%91%E8%A1%A5%E5%81%BF%E8%A7%A3%E5%86%B3%E6%80%9D%E8%B7%AF.html" class="sidebar-item" aria-label="消息的重发补偿解决思路"><!--[--><!--]--> 消息的重发补偿解决思路 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/09.%E6%B6%88%E6%81%AF%E9%98%9F%E5%88%97/%E6%B6%88%E6%81%AF%E9%98%9F%E5%88%97%E7%9A%84%E4%BD%BF%E7%94%A8%E5%9C%BA%E6%99%AF.html" class="sidebar-item" aria-label="消息队列的使用场景"><!--[--><!--]--> 消息队列的使用场景 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/09.%E6%B6%88%E6%81%AF%E9%98%9F%E5%88%97/%E8%87%AA%E5%B7%B1%E5%A6%82%E4%BD%95%E5%AE%9E%E7%8E%B0%E6%B6%88%E6%81%AF%E9%98%9F%E5%88%97.html" class="sidebar-item" aria-label="自己如何实现消息队列"><!--[--><!--]--> 自己如何实现消息队列 <!--[--><!--]--></a><!----></li><!--]--></ul><!--]--></li><li><p tabindex="0" class="sidebar-item sidebar-heading">Netty <!----></p><!--[--><ul style="" class="sidebar-item-children"><!--[--><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/10.Netty/Netty%20%E5%86%85%E9%83%A8%E6%89%A7%E8%A1%8C%E6%B5%81%E7%A8%8B.html" class="sidebar-item" aria-label="Netty 内部执行流程"><!--[--><!--]--> Netty 内部执行流程 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/10.Netty/Netty%20%E7%BA%BF%E7%A8%8B%E6%A8%A1%E5%9E%8B.html" class="sidebar-item" aria-label="Netty 线程模型"><!--[--><!--]--> Netty 线程模型 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/10.Netty/Netty%20%E9%87%8D%E8%BF%9E%E5%AE%9E%E7%8E%B0.html" class="sidebar-item" aria-label="Netty 重连实现"><!--[--><!--]--> Netty 重连实现 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/10.Netty/TCP%20%E7%B2%98%E5%8C%85%E6%8B%86%E5%8C%85%E7%9A%84%E8%A7%A3%E5%86%B3%E5%8A%9E%E6%B3%95.html" class="sidebar-item" aria-label="TCP 粘包/拆包的解决办法"><!--[--><!--]--> TCP 粘包/拆包的解决办法 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/10.Netty/%E4%B8%BA%E4%BB%80%E4%B9%88%E9%80%89%E6%8B%A9%20Netty.html" class="sidebar-item" aria-label="为什么选择 Netty"><!--[--><!--]--> 为什么选择 Netty <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/10.Netty/%E4%BB%80%E4%B9%88%E6%98%AF%20TCP%20%E7%B2%98%E5%8C%85%E6%8B%86%E5%8C%85.html" class="sidebar-item" aria-label="什么是 TCP 粘包/拆包"><!--[--><!--]--> 什么是 TCP 粘包/拆包 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/10.Netty/%E5%8E%9F%E7%94%9F%E7%9A%84%20NIO%20%E5%9C%A8%20JDK%201.7%20%E7%89%88%E6%9C%AC%E5%AD%98%E5%9C%A8%20EPoll%20BUG.html" class="sidebar-item" aria-label="原生的 NIO 在 JDK 1.7 版本存在 EPoll BUG"><!--[--><!--]--> 原生的 NIO 在 JDK 1.7 版本存在 EPoll BUG <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/10.Netty/%E8%AF%B4%E8%AF%B4%20Netty%20%E7%9A%84%E9%9B%B6%E6%8B%B7%E8%B4%9D.html" class="sidebar-item" aria-label="说说 Netty 的零拷贝"><!--[--><!--]--> 说说 Netty 的零拷贝 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/10.Netty/%E8%AF%B4%E8%AF%B4%E4%B8%9A%E5%8A%A1%E4%B8%AD%20Netty%20%E7%9A%84%E4%BD%BF%E7%94%A8%E5%9C%BA%E6%99%AF.html" class="sidebar-item" aria-label="说说业务中 Netty 的使用场景"><!--[--><!--]--> 说说业务中 Netty 的使用场景 <!--[--><!--]--></a><!----></li><!--]--></ul><!--]--></li><li><p tabindex="0" class="sidebar-item sidebar-heading">安全篇 <!----></p><!--[--><ul style="" class="sidebar-item-children"><!--[--><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/11.%E5%AE%89%E5%85%A8%E7%AF%87/HTTPS%20%E5%8E%9F%E7%90%86%E5%89%96%E6%9E%90.html" class="sidebar-item" aria-label="HTTPS 原理剖析"><!--[--><!--]--> HTTPS 原理剖析 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/11.%E5%AE%89%E5%85%A8%E7%AF%87/HTTPS%20%E9%99%8D%E7%BA%A7%E6%94%BB%E5%87%BB.html" class="sidebar-item" aria-label="HTTPS 降级攻击"><!--[--><!--]--> HTTPS 降级攻击 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/11.%E5%AE%89%E5%85%A8%E7%AF%87/%E5%9F%BA%E4%BA%8E%E8%A7%92%E8%89%B2%E7%9A%84%E8%AE%BF%E9%97%AE%E6%8E%A7%E5%88%B6.html" class="sidebar-item" aria-label="基于角色的访问控制"><!--[--><!--]--> 基于角色的访问控制 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/11.%E5%AE%89%E5%85%A8%E7%AF%87/%E5%AE%89%E5%85%A8%E8%A6%81%E7%B4%A0%E4%B8%8E%20STRIDE%20%E5%A8%81%E8%83%81.html" class="sidebar-item" aria-label="安全要素与 STRIDE 威胁"><!--[--><!--]--> 安全要素与 STRIDE 威胁 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/11.%E5%AE%89%E5%85%A8%E7%AF%87/%E6%8E%88%E6%9D%83%E4%B8%8E%E8%AE%A4%E8%AF%81.html" class="sidebar-item" aria-label="授权与认证"><!--[--><!--]--> 授权与认证 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/11.%E5%AE%89%E5%85%A8%E7%AF%87/%E9%98%B2%E8%8C%83%E5%B8%B8%E8%A7%81%E7%9A%84%20Web%20%E6%94%BB%E5%87%BB.html" class="sidebar-item" aria-label="防范常见的 Web 攻击"><!--[--><!--]--> 防范常见的 Web 攻击 <!--[--><!--]--></a><!----></li><!--]--></ul><!--]--></li><li><p tabindex="0" class="sidebar-item sidebar-heading">性能篇 <!----></p><!--[--><ul style="" class="sidebar-item-children"><!--[--><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/12.%E6%80%A7%E8%83%BD%E7%AF%87/%E5%A6%82%E4%BD%95%E5%8F%91%E7%8E%B0%E6%80%A7%E8%83%BD%E7%93%B6%E9%A2%88.html" class="sidebar-item" aria-label="如何发现性能瓶颈"><!--[--><!--]--> 如何发现性能瓶颈 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/12.%E6%80%A7%E8%83%BD%E7%AF%87/%E6%80%A7%E8%83%BD%E6%8C%87%E6%A0%87%E6%9C%89%E5%93%AA%E4%BA%9B.html" class="sidebar-item" aria-label="性能指标有哪些"><!--[--><!--]--> 性能指标有哪些 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/12.%E6%80%A7%E8%83%BD%E7%AF%87/%E6%80%A7%E8%83%BD%E8%B0%83%E4%BC%98%E7%9A%84%E5%B8%B8%E8%A7%81%E6%89%8B%E6%AE%B5.html" class="sidebar-item" aria-label="性能调优的常见手段"><!--[--><!--]--> 性能调优的常见手段 <!--[--><!--]--></a><!----></li><!--]--></ul><!--]--></li><li><p tabindex="0" class="sidebar-item sidebar-heading">设计模式 <!----></p><!--[--><ul style="" class="sidebar-item-children"><!--[--><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/13.%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/23%20%E7%A7%8D%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%E7%9A%84%E8%AE%BE%E8%AE%A1%E7%90%86%E5%BF%B5.html" class="sidebar-item" aria-label="23 种设计模式的设计理念"><!--[--><!--]--> 23 种设计模式的设计理念 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/13.%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%E4%B9%8B%E9%97%B4%E7%9A%84%E5%BC%82%E5%90%8C%EF%BC%8C%E4%BE%8B%E5%A6%82%E7%AD%96%E7%95%A5%E6%A8%A1%E5%BC%8F%E4%B8%8E%E7%8A%B6%E6%80%81%E6%A8%A1%E5%BC%8F%E7%9A%84%E5%8C%BA%E5%88%AB.html" class="sidebar-item" aria-label="设计模式之间的异同，例如策略模式与状态模式的区别"><!--[--><!--]--> 设计模式之间的异同，例如策略模式与状态模式的区别 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/13.%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%E4%B9%8B%E9%97%B4%E7%9A%84%E7%BB%93%E5%90%88%EF%BC%8C%E4%BE%8B%E5%A6%82%E7%AD%96%E7%95%A5%E6%A8%A1%E5%BC%8F%20+%20%E7%AE%80%E5%8D%95%E5%B7%A5%E5%8E%82%E6%A8%A1%E5%BC%8F%E7%9A%84%E5%AE%9E%E8%B7%B5.html" class="sidebar-item" aria-label="设计模式之间的结合，例如策略模式 + 简单工厂模式的实践"><!--[--><!--]--> 设计模式之间的结合，例如策略模式 + 简单工厂模式的实践 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/13.%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%E7%9A%84%E6%80%A7%E8%83%BD%EF%BC%8C%E4%BE%8B%E5%A6%82%E5%8D%95%E4%BE%8B%E6%A8%A1%E5%BC%8F%E5%93%AA%E7%A7%8D%E6%80%A7%E8%83%BD%E6%9B%B4%E5%A5%BD.html" class="sidebar-item" aria-label="设计模式的性能，例如单例模式哪种性能更好"><!--[--><!--]--> 设计模式的性能，例如单例模式哪种性能更好 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/13.%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/%E8%AF%B4%E8%AF%B4%E4%BD%A0%E5%AF%B9%E8%AE%BE%E8%AE%A1%E5%8E%9F%E5%88%99%E7%9A%84%E7%90%86%E8%A7%A3.html" class="sidebar-item" aria-label="说说你对设计原则的理解"><!--[--><!--]--> 说说你对设计原则的理解 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/13.%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/%E8%AF%B4%E8%AF%B4%E5%B8%B8%E7%94%A8%E5%BC%80%E6%BA%90%E6%A1%86%E6%9E%B6%E4%B8%AD%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%E4%BD%BF%E7%94%A8%E5%88%86%E6%9E%90.html" class="sidebar-item" aria-label="说说常用开源框架中设计模式使用分析"><!--[--><!--]--> 说说常用开源框架中设计模式使用分析 <!--[--><!--]--></a><!----></li><!--]--></ul><!--]--></li><li><p tabindex="0" class="sidebar-item sidebar-heading">需求分析 <!----></p><!--[--><ul style="" class="sidebar-item-children"><!--[--><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/14.%E9%9C%80%E6%B1%82%E5%88%86%E6%9E%90/%E4%BD%A0%E5%A6%82%E4%BD%95%E5%AF%B9%E9%9C%80%E6%B1%82%E5%8E%9F%E5%9E%8B%E8%BF%9B%E8%A1%8C%E7%90%86%E8%A7%A3%E5%92%8C%E6%8B%86%E5%88%86.html" class="sidebar-item" aria-label="你如何对需求原型进行理解和拆分"><!--[--><!--]--> 你如何对需求原型进行理解和拆分 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/14.%E9%9C%80%E6%B1%82%E5%88%86%E6%9E%90/%E4%BD%A0%E5%A6%82%E4%BD%95%E7%90%86%E8%A7%A3%E7%94%A8%E6%88%B7%E7%97%9B%E7%82%B9.html" class="sidebar-item" aria-label="你如何理解用户痛点"><!--[--><!--]--> 你如何理解用户痛点 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/14.%E9%9C%80%E6%B1%82%E5%88%86%E6%9E%90/%E4%BD%A0%E9%92%88%E5%AF%B9%E4%BA%A7%E5%93%81%E6%8F%90%E5%87%BA%E5%93%AA%E4%BA%9B%E4%BA%A4%E4%BA%92%E5%92%8C%E6%94%B9%E8%BF%9B%E6%84%8F%E8%A7%81.html" class="sidebar-item" aria-label="你针对产品提出哪些交互和改进意见"><!--[--><!--]--> 你针对产品提出哪些交互和改进意见 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/14.%E9%9C%80%E6%B1%82%E5%88%86%E6%9E%90/%E8%AF%B4%E8%AF%B4%E4%BD%A0%E5%AF%B9%E5%8A%9F%E8%83%BD%E6%80%A7%E9%9C%80%E6%B1%82%E7%9A%84%E7%90%86%E8%A7%A3.html" class="sidebar-item" aria-label="说说你对功能性需求的理解"><!--[--><!--]--> 说说你对功能性需求的理解 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/14.%E9%9C%80%E6%B1%82%E5%88%86%E6%9E%90/%E8%AF%B4%E8%AF%B4%E4%BD%A0%E5%AF%B9%E9%9D%9E%E5%8A%9F%E8%83%BD%E6%80%A7%E9%9C%80%E6%B1%82%E7%9A%84%E7%90%86%E8%A7%A3.html" class="sidebar-item" aria-label="说说你对非功能性需求的理解"><!--[--><!--]--> 说说你对非功能性需求的理解 <!--[--><!--]--></a><!----></li><!--]--></ul><!--]--></li><li><p tabindex="0" class="sidebar-item sidebar-heading">设计能力 <!----></p><!--[--><ul style="" class="sidebar-item-children"><!--[--><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/15.%E8%AE%BE%E8%AE%A1%E8%83%BD%E5%8A%9B/%E4%BD%A0%E5%A6%82%E4%BD%95%E5%88%92%E5%88%86%E9%A2%86%E5%9F%9F%E8%BE%B9%E7%95%8C.html" class="sidebar-item" aria-label="你如何划分领域边界"><!--[--><!--]--> 你如何划分领域边界 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/15.%E8%AE%BE%E8%AE%A1%E8%83%BD%E5%8A%9B/%E4%BD%A0%E5%A6%82%E4%BD%95%E8%80%83%E8%99%91%E6%9C%8D%E5%8A%A1%E5%8C%96.html" class="sidebar-item" aria-label="你如何考虑服务化"><!--[--><!--]--> 你如何考虑服务化 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/15.%E8%AE%BE%E8%AE%A1%E8%83%BD%E5%8A%9B/%E4%BD%A0%E5%A6%82%E4%BD%95%E8%80%83%E8%99%91%E7%BB%84%E4%BB%B6%E5%8C%96.html" class="sidebar-item" aria-label="你如何考虑组件化"><!--[--><!--]--> 你如何考虑组件化 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/15.%E8%AE%BE%E8%AE%A1%E8%83%BD%E5%8A%9B/%E4%BD%A0%E5%A6%82%E4%BD%95%E8%BF%9B%E8%A1%8C%E9%A2%86%E5%9F%9F%E5%BB%BA%E6%A8%A1.html" class="sidebar-item" aria-label="你如何进行领域建模"><!--[--><!--]--> 你如何进行领域建模 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/15.%E8%AE%BE%E8%AE%A1%E8%83%BD%E5%8A%9B/%E8%AF%B4%E8%AF%B4%E4%BD%A0%E5%9C%A8%E9%A1%B9%E7%9B%AE%E4%B8%AD%E4%BD%BF%E7%94%A8%E8%BF%87%E7%9A%84%20UML%20%E5%9B%BE.html" class="sidebar-item" aria-label="说说你在项目中使用过的 UML 图"><!--[--><!--]--> 说说你在项目中使用过的 UML 图 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/15.%E8%AE%BE%E8%AE%A1%E8%83%BD%E5%8A%9B/%E8%AF%B4%E8%AF%B4%E6%A6%82%E8%A6%81%E8%AE%BE%E8%AE%A1.html" class="sidebar-item" aria-label="说说概要设计"><!--[--><!--]--> 说说概要设计 <!--[--><!--]--></a><!----></li><!--]--></ul><!--]--></li><li><p tabindex="0" class="sidebar-item sidebar-heading">未分类 <!----></p><!--[--><ul style="" class="sidebar-item-children"><!--[--><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/16.%E6%9C%AA%E5%88%86%E7%B1%BB/JDK8%20%E6%96%B0%E7%89%B9%E6%80%A7.html" class="sidebar-item" aria-label="JDK8 新特性"><!--[--><!--]--> JDK8 新特性 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/16.%E6%9C%AA%E5%88%86%E7%B1%BB/JavaScript%20this%20%E5%85%B3%E9%94%AE%E5%AD%97.html" class="sidebar-item" aria-label="JavaScript this 关键字"><!--[--><!--]--> JavaScript this 关键字 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/16.%E6%9C%AA%E5%88%86%E7%B1%BB/MySQL%20%E4%BC%98%E5%8C%96.html" class="sidebar-item" aria-label="MySQL 优化"><!--[--><!--]--> MySQL 优化 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/16.%E6%9C%AA%E5%88%86%E7%B1%BB/Zookeeper%20%E5%81%87%E6%AD%BB%E8%84%91%E8%A3%82.html" class="sidebar-item" aria-label="Zookeeper 假死脑裂"><!--[--><!--]--> Zookeeper 假死脑裂 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/16.%E6%9C%AA%E5%88%86%E7%B1%BB/%E5%8F%8C%E4%BA%B2%E5%A7%94%E6%B4%BE%E6%A8%A1%E5%9E%8B.html" class="sidebar-item" aria-label="双亲委派模型"><!--[--><!--]--> 双亲委派模型 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/16.%E6%9C%AA%E5%88%86%E7%B1%BB/%E6%AD%BB%E4%BF%A1%E3%80%81%E5%BB%B6%E8%BF%9F%E3%80%81%E9%87%8D%E8%AF%95%E9%98%9F%E5%88%97.html" class="sidebar-item" aria-label="死信、延迟、重试队列"><!--[--><!--]--> 死信、延迟、重试队列 <!--[--><!--]--></a><!----></li><li><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/16.%E6%9C%AA%E5%88%86%E7%B1%BB/%E9%9D%A2%E8%AF%95%E9%A2%98%E8%A1%A5%E5%85%85.html" class="sidebar-item" aria-label="概述"><!--[--><!--]--> 概述 <!--[--><!--]--></a><!----></li><!--]--></ul><!--]--></li><!--]--></ul><!--[--><!--]--></aside><!--]--><!--[--><main class="page"><!--[--><!--]--><div class="theme-default-content"><!--[--><h1 id="jdbc-流程" tabindex="-1"><a class="header-anchor" href="#jdbc-流程" aria-hidden="true">#</a> JDBC 流程</h1><ul><li>向 DriverManager 类注册驱动数据库驱动程序</li><li>调用 DriverManager.getConnection 方法， 通过 JDBC URL，用户名，密码取得数据库连接的 Connection 对象。</li><li>获取 Connection 后， 便可以通过 createStatement 创建 Statement 用以执行 SQL 语句。</li><li>有时候会得到查询结果，比如 select，得到查询结果，查询（SELECT）的结果存放于结果集（ResultSet）中。</li><li>关闭数据库语句，关闭数据库连接。</li></ul><!--]--></div><footer class="page-meta"><!----><div class="meta-item last-updated"><span class="meta-item-label">Last Updated: </span><!----></div><div class="meta-item contributors"><span class="meta-item-label">Contributors: </span><span class="meta-item-info"><!--[--><!--[--><span class="contributor" title="email: fxiaoyu97@qq.com">calos</span><!----><!--]--><!--]--></span></div></footer><nav class="page-nav"><p class="inner"><span class="prev"><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/00.java%E5%9F%BA%E7%A1%80/HTTP%20%E8%AF%B7%E6%B1%82%E7%9A%84%20GET%20%E4%B8%8E%20POST%20%E6%96%B9%E5%BC%8F%E7%9A%84%E5%8C%BA%E5%88%AB.html" class="" aria-label="HTTP 请求的 GET 与 POST 方式的区别"><!--[--><!--]--> HTTP 请求的 GET 与 POST 方式的区别 <!--[--><!--]--></a></span><span class="next"><a href="/calos/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/00.java%E5%9F%BA%E7%A1%80/equals%20%E4%B8%8E%20==%20%E7%9A%84%E5%8C%BA%E5%88%AB.html" class="" aria-label="equals 与 == 的区别"><!--[--><!--]--> equals 与 == 的区别 <!--[--><!--]--></a></span></p></nav><!--[--><!--]--></main><!--]--></div><!----><!--]--></div>
    <script type="module" src="/calos/assets/app.3c01b79d.js" defer></script>
  </body>
</html>
